import { fileURLToPath, URL } from 'node:url';
import replace from '@rollup/plugin-replace';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import bundleAnalyzer from 'rollup-plugin-bundle-analyzer';
import viteImagemin from 'vite-plugin-imagemin';
import { terser } from 'rollup-plugin-terser';

export default defineConfig({
  plugins: [
    viteImagemin(), // 图片压缩插件
    bundleAnalyzer({
      analyzerMode: 'static', // 使用静态模式，将报告保存为 HTML 文件
      reportFileName: 'bundle-report.html', // 报告的文件名
    }),
    vue(), // Vue 插件，用于支持 Vue 单文件组件
    vueJsx(), // Vue JSX 插件，用于支持在 Vue 中使用 JSX 语法
  ],
  resolve: {
    alias: {
      // 别名配置，将 @ 映射到 './src'
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
  server: {
    strictPort: true, // 启用严格模式，确保端口号未被占用
    host: '0.0.0.0', // 服务器绑定的主机地址
    port: 5173, // 服务器监听的端口号
    open: false, // 默认情况下不自动打开浏览器
    proxy: {
      '/v1': {
        target: 'http://www.hkbri.com:8889',
        changeOrigin: true,
      },
    }, // 代理配置，用于将请求转发到另一个地址
  },
  cacheDir: '.vite-cache', // 缓存目录的路径
  build: {
    outDir: 'dist', // 打包输出目录
    assetsDir: 'assets', // 静态资源输出目录
    emptyOutDir: true, // 在打包之前清空输出目录
    chunkSizeWarningLimit: 500, // 分包的大小警告门限
    rollupOptions: {
      plugins: [
        replace({
          'process.env.NODE_ENV': JSON.stringify('production'), // 替换代码中的环境变量
          'console.log': '(() => {})', // 替换代码中的 console.log 语句，将其变为一个空函数
        }),
        terser({
          // terser插件用于压缩和混淆 JavaScript 代码
          format: { comments: false }, // 压缩代码时去除注释
        }),
      ],
    },
  },
});
